package com.now.doublepointer;

/**
 * 283. 移动零
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * 输入: [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 */
public class MoveZeroes {
    /**
     * 循环过多，费时
     * @param nums
     */
    public static void moveZeroes(int[] nums) {
        int length = nums.length;
        int count =0;
        for(int i=0;i<nums.length-count;i++){
            int index = i;
            if(nums[i]==0){
                int data = nums[i];
                while(index<length-1){
                    nums[index]=nums[index+1];
                    index++;
                }
                nums[length-1]=data;
                count++;
                i=-1;
            }
        }

    }

    /**
     * 使用双指针，左指针指向当前已经处理好的序列的尾部，右指针指向待处理序列的头部。
     *
     * 右指针不断向右移动，每次右指针指向非零数，则将左右指针对应的数交换，同时左指针右移。
     *
     * 作者：LeetCode-Solution
     * 链接：https://leetcode-cn.com/problems/move-zeroes/solution/yi-dong-ling-by-leetcode-solution/
     * 来源：力扣（LeetCode）
     * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
     * @param nums
     */
    public static void moveZeroes1(int[] nums) {
        int i=0,j=0;
        while(j<nums.length){
            int data;
            if(nums[j]!=0){
                data = nums[i];
                nums[i]=nums[j];
                nums[j]=data;
                i++;
            }
            j++;
        }
    }
    public static void main(String[] args) {
        int[] nums ={2,1};
        moveZeroes1(nums);
        System.out.println(nums);
    }
}
